#include "LinkList.h"
#include "DoubleLinkList.h"
#include <iostream>


int main()
{
#if 1 // 单链表
        LinkList l;
    #if 1
        // 尾插
        for(int i = 0; i < 10; i++)
        {
            l.InsertTail(i+1);
        }
        l.show();
    #endif

    #if 0
        // 头插
        for(int i = 0; i < 10; i++)
        {
            l.InsertHead(i+1);
        }
        l.show();
    #endif

    #if 0
        // 中间插
        l.InsertByIndex(1, 99);
        l.show();
    #endif

    #if 0
        // 按位置删
        l.RemoveByIndex(0);
        l.show();
    #endif

    #if 0
        // 按值删
        l.RemoveByElement(1);
        l.show();
    #endif

    #if 0
        // 按位置修改
        l.UpdateByIndex(1, 200);
        l.show();
    #endif

    #if 0
        // 按值修改
        l.UpdateByElement(8, 800);
        l.show();
    #endif

    #if 1
        // 拷贝构造
        LinkList l2 = l;
        l2.show();
    #endif
        // // 冒泡排序
        // l.BubbleSort();
        // l.show();

        

        // 归并
        // l.Merge(l2).show();

        // // 排序
        // l.Sort();
        // l.show();

        // // 逆序（三指针）
        // l.Reserve();
        // l.show();

        // 逆序（递归）
        // l.Reserve2();
        // l.show();
#endif

#if 0
    DoubleLinkList l;
    // // 尾插
    // for(int i = 0; i < 10; i++)
    // {
    //     l.InsertTail(i+1);
    // }
    // l.show();

    // 头插
    for(int i = 0; i < 10; i++)
    {
        l.InsertHead(i+1);
    }
    l.show();

    // // 中间插
    // l.InsertByIndex(l.Size(), 100);
    // l.show();

    // // 按值查找
    //  l.FindByElement(5);

    

    // // 按位置删
    // l.RemoveByIndex(0);
    // l.RemoveByIndex(l.Size() - 1);
    // l.show();

    // // 按值删
    // l.RemoveByElement(1);
    // l.show();

    // // 按值修改
    // l.UpDateByElement(1, 99);
    // l.show();

    // 按值查找
    // std::cout<<l.FindByElement(3)<<std::endl;

    // // 逆序
    // l.ReserveShow();

    // // 拷贝构造
    // DoubleLinkList l2 = l;
    // l2.show();
    // // 归并
    // l.Merge(l2).show();

    // 排序
    l.Sort();
    l.show();

    // 重载 []
    std::cout<<l[0]<<std::endl;

#endif
    return 0;
}